<?php

namespace Inscripcion\Model\Dao;

/**
 * Componentes necesarios para el modelado
 */
use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;
use Inscripcion\Model\Entity\InscripcionDatos;

/**
 * @package Dao
 */
class InscripcionDatosDAO {

    protected $dbAdapter;

    /**
     * Nombre de la Tabla
     * @var type 
     */
    protected $tabla = 'inscripcion_datos';
    private static $inscripcionDatosDao;

    /**
     * Configura Adaptador de Base de Datos
     * 
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    private function __construct(Adapter $adapter) {
        $this->dbAdapter = $adapter;
    }

    /**
     * 
     * @param type $adapter
     * @return instancia de InscripcionDatosDao
     * Patron singleton
     * PROBADO
     */
    public static function getInstance($adapter) {
        if (self::$inscripcionDatosDao == null) {
            self::$inscripcionDatosDao = new InscripcionDatosDao($adapter);
        }
        return self::$inscripcionDatosDao;
    }

    public function getInscripcionDatos($id) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where("id='" . $id . "'");
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     * 
     */
    public function getInscripcionDatossSegunIdAlumnoYLapso($idAlumno, $lapso) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array("id_alumno = " . $idAlumno . "",
            "id_lapso = " . $lapso));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    public function getInscripcionDatosSegunFecha($fecha, $lapso) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array("cast(fecha_inicio as date) = '" . $fecha . "'", 'id_lapso' => $lapso, 'id_metodologia' => array(1, 2)));
        $select->order(array('fecha_inicio', 'id_alumno'));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    public function getInscripcionDatosEstudiantesMetodologiaPresencial($lapso) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array("id_metodologia <> 1 ", "id_metodologia <> 2 ", 'id_lapso' => $lapso));
        $select->order(array('id', 'id_alumno'));
        $selectString = $sql->getSqlStringForSqlObject($select);
        //echo $selectString;
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     */
    public function updateCodigoSeguridadYEstado($alumno, $lapso, $codigo) {
        $sql = new Sql($this->dbAdapter);
        $update = $sql->update();
        $update->table($this->tabla);
        $update->set(array('codigo_seguridad' => $codigo, 'estado' => 1));
        $update->where(array('id_alumno' => $alumno->getId(), 'id_lapso' => $lapso));
        $statement = $sql->prepareStatementForSqlObject($update);
        if ($statement->execute()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @param type $data
     * @return type
     */
//    public function createRegistro($data){
//        $columns = array();
//        $values = array();
//        foreach($data as $column=>$value){
//            $columns[]  = $column;
//            $values[$column]   = (string)$value;
//        }
//        $sql = new Sql($this->dbAdapter);
//        $insert = $sql->insert();
//        $insert->into($this->tabla);
//        $insert->columns($columns);
//        $insert->values($values);
//        $statement = $sql->prepareStatementForSqlObject($insert);
//        if($statement->execute()){
//            return true;
//        }else{
//            return false;
//        }
//    }

    /**
     * @param type $id
     * @param type $data
     * @return type
     */
//    public function updateRegistro(InscripcionDatos $inscripcionDatos){
////        $a = "salumestado";
//        $inscripcionDatosArray = $inscripcionDatos->objectToArray($inscripcionDatos);
////        print_r($inscripcionDatosArray);
//        $sql = new Sql($this->dbAdapter);
//        $update = $sql->update();
//        $update->table($this->tabla);
//        $update->set($inscripcionDatosArray);
//        $update->where("salumid='".$inscripcionDatos->getId()."'");
//        $statement = $sql->prepareStatementForSqlObject($update);
////        if($statement->execute()){
////            return true;
////        }else{
//            return false;
////        }
//    }

    /**
     * Eliminar un registro en base al id
     * @param type $id
     * @return bool
     */
//    public function deleteRegistro($id) {
//        $sql = new Sql($this->dbAdapter);
//        $delete = $sql->delete();
//        $delete->from($this->tabla);
//        $delete->where('salumid='.$id);
//        $statement = $sql->prepareStatementForSqlObject($delete);
//        if($statement->execute()){
//            return true;
//        }else{
//            return false;
//        }
//    }
}
